const response = require('./response')
const jwt = require('jsonwebtoken')
const bcrypt = require('bcryptjs');
// 引入引入用户表
const userModel = require('./../models/user');

// 用于 生成token 和 解密token 的字符串
const SECRET = '5i4g42msmwpfqv'
// 过期时间（秒）
const tokenTime = 3600 * 24 * 3;

const auth = (req, res, next) => {
    // 获取请求头中的token
    let tokenStr = String(req.headers.authorization)

    // 如果没有token
    res.statusCode = 401;
    if (tokenStr == "undefined")
        return response(res, 1, "无效token");

    // 解析token
    jwt.verify(tokenStr, SECRET, async (err, tokenRes) => {
        // token无效
        if (err)
            return response(res, 10, 'token无效')

        let _id = tokenRes.id;
        let user = await userModel.findOne({ _id })
        // 用户不存在
        if (!user)
            return response(res, 10, '用户不存在')

        // token过期
        if (tokenRes.iat + tokenTime < new Date().getTime() / 1000)
            return response(res, 10, 'token过期')

        // 返回成功消息
        req.tokenRes = tokenRes
        res.statusCode = 200;
        next();
    })
}

module.exports = { auth, SECRET }